package cn.itcast.nems.studentrecord.dao.dataobject;

import cn.itcast.nems.employee.dao.bean.EmployeeGroupBean;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;

@Data
public class StudentRecordDO implements Serializable {
    /**
     * 学籍编号
     */
    private String id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 缴费状态  CREATE("创建订单"), PART_PAID("部分支付"), ALL_PAID("完成支付"), ORDER_CANCEL("订单取消"),INVOICED("开取收据") ;
     */
    private String orderType;
    /**
     * 缴费状态  0|未完成缴费、1|已完成缴费
     */
    private Integer paidState ;
    /**
     * 班级ID
     */
    private Integer clazzId;
    /**
     * 班级结课时间
     */
    private LocalDateTime graduationDate;
    /**
     * 班级ID集合
     */
    private List<Integer> clazzIds;
    /**
     * 班级名称
     */
    private String clazzName;
    /**
     * 状态;枚举值：未生效｜PENDING、生效｜VALID、失效｜INVALID、结课｜FINISHED。注：非结课出班后学籍状态变为“失效”
     */
    private String state;
    private List<String> states;
    /**
     * 进班时间
     */
    private LocalDateTime inDate;
    /**
     * 出班结算日期;退学、转班、进待定班、结课等出班的操作都应记录该值。
     */
    private LocalDateTime settlementDate;

    /**
     * 出班结算原因;中文描述。如：转班、休学、进待定班、结课等
     */
    private String settlementReason;
    /**
     * 出班原因
     */
    private Integer outCauseId;
    /**
     * 出班原因名称
     */
    private String outCauseName;
    /**
     * 执行价格
     */
    private Integer price;
    /**
     * 优惠金额总额
     */
    private Integer discountAmount;
    /**
     * 应付金额
     */
    private Integer amountDue;
    /**
     * 调整金额
     */
    private Integer adjustmentAmount;
    /**
     * 转移费用金额
     */
    private Integer transferAmount;
    /**
     * 实际应付金额
     */
    private Integer actualAmountDue;
    /**
     * 剩余应付金额, 单位:分
     */
    private Integer balanceAmountDue;
    /**
     * 转班转入金额;注：来自转班凭单，由其他学籍转进来金额。
     */
    private Integer transferFromAmount;
    /**
     * 已付金额
     */
    private Integer paidAmount;
    /**
     * 学籍操作锁;枚举值：0｜无锁、1｜已上锁；场景：处于升班场景中的学籍，不允许再办理转班等其他操作。
     */
    private Byte lockFlag;
    /**
     * 升班标识
     */
    private Byte renewalFlag;
    /**
     * 旧EMS学籍ID
     */
    private Integer oldEmsRecordId;
    /**
     * 学籍备注
     */
    private String remark;
    /**
     * 班级名称
     */
    private String className;
    /**
     * 校区ID
     */
    private String schoolId;
    /**
     * 授课模式
     */
    private String teachingModel;
    /**
     * 学科ID
     */
    private String subjectId;
    /**
     * 班级类型ID
     */
    private String classTypeId;
    /**
     * 排除的学科ID
     */
    private List<String> excludeSubjectIds;
    /**
     * 是否可升级
     */
    private Boolean upgradeable;
    /**
     * 是否包含待定班
     */
    private Boolean includeWait;
    /**
     * 是否包含待删班
     */
    private Boolean includeWaitDeleted;
    /**
     * 性别
     */
    private String gender;
    /**
     * 学员ID
     */
    private Integer studentId;
    /**
     * 开班日期下限
     */
    private LocalDate minStartDate;
    /**
     * 开班日期上限
     */
    private LocalDate maxStartDate;
    /**
     * 学号
     */
    private String studentNo;
    /**
     * 唯一code；为保护学籍ID不泄漏，主要用于该学籍统一的支付链接
     */
    private String uniqueCode;
    /**
     * 当前所在班级的预计结课日期
     */
    private LocalDate predictionGraduationDate;
    /**
     * 学科名称
     */
    private String subjectName;
    /**
     * 学员ID集合, 一般用于批量查询
     */
    private Set<Integer> studentIds;

    private List<String> list ;
    /**
     * 是否待定班级, true: 是
     */
    private Boolean delayFlag;
    /**
     * 是否休学班级,true:是
     */
    private Boolean suspensionFlag;
    /**
     * 是否包含出班学籍
     */
    private Boolean includeLeaveClazz;
    /**
     * 是否包含无效的学籍
     */
    private Boolean includeInvalid;

    /**
     * 统计标识
     */
    private Boolean statisticsFlag ;
    /**
     * 开班日期
     */
    private LocalDate startDate;

    private List<EmployeeGroupBean> employeeGroups;


    /**
     * 是否排除用户组
     */
    private Boolean excludeFlag  ;

    private Boolean transfer;
    /**
     * 退费金额
     */
    private Integer refundAmount;
    /**
     * 转出金额 = SUM(费用转出金额) + 转班转出金额；转班转出金额 = 已付金额 + 转入金额 - SUM(费用转出金额) - 退费金额 - 课耗金额（在转班相关凭单审批通过时计算，不可为负数，负数时该值为0）
     */
    private Integer transferOutAmount;

    private String phone ;
    private String keyword ;
    private Set<String> settlementReasonSet ;

    /**
     * 学籍来源，枚举值：新报名｜NEW、升班｜RENEWAL、转班｜EXCHANGE、转移｜TRANSFER、休学｜SUSPENSION、待定班｜DELAY、重读｜REPEAT
     */
    private String source ;
    /**
     * 付款方式
     */
    private String paymentType ;
    /**
     * 合同状态
     */
    private String contractState ;
    /**
     * 排座时间
     */
    private LocalDateTime seatOrderTime ;
    /**
     * 学籍创建时间
     */
    private LocalDateTime createdDatetime ;
    /**
     * 是否当前班级
     */
    private Boolean isCurrentClazz ;

    /**
     * 时间间隔
     */
    private Long interval ;
    /**
     * 数量
     */
    private Integer quantity;

    /**
     * 权重
     */
    private Integer sort ;
    /**
     * 关联学籍ID;记录该学籍来源的上一个学籍ID。比如升班时记录基础班学籍ID，转班时记录转班来源的学籍ID等
     */
    private String associatedRecordId;
}
